Webframeworkk/ASP.NET Core/Identitäts- und Autorisierungssicherheit

Willkommen zum umfassenden Tutorial über ASP.NET Core Identity und MVC basierend auf unserer Analyse. Dieser Leitfaden deckt Authentifizierung, Autorisierung und wesentliche MVC-Muster ab.

Einführung in ASP.NET Core Identity

ASP.NET Core Identity ist ein robustes und flexibles Mitgliedschaftssystem, mit dem Sie Authentifizierungs- und Autorisierungsfunktionen zu Ihren Webanwendungen hinzufügen können.

Zweck und Hauptmerkmale

  • Benutzerauthentifizierung: Überprüfung der Benutzeridentität und Kontrolle des Zugriffs.
  • Benutzerverwaltung: Handhabung von Registrierung, Login, Logout, Passwort-Resets und Profilverwaltung.
  • Autorisierung:
    • Rollenbasiert (Role-Based): Zugriffsbeschränkung basierend auf Benutzerrollen (z. B. Admin, User).
    • Anspruchsbasiert (Claims-Based): Entscheidungen basierend auf Benutzerattributen (Claims).
  • Externe Logins: Integration mit Google, Facebook usw.
  • Sicherheit: Unterstützung für Zwei-Faktor-Authentifizierung (2FA) und Passwort-Hashing.

Hauptkomponenten

Identity-Modelle

  • ApplicationUser: Erweitert `IdentityUser`. Repräsentiert Benutzer in Ihrer App. Kann benutzerdefinierte Eigenschaften wie `PersonName` enthalten.
  • ApplicationRole: Erweitert `IdentityRole`. Definiert Rollen innerhalb der Anwendung.

Kerndienste (Manager)

Wird über Dependency Injection in Ihren Controllern verwaltet:

  • UserManager: Verwaltet Benutzerkonten (Erstellen, Löschen, Suchen, Aktualisieren).
  • SignInManager: Kümmert sich um Anmelde- und Abmeldevorgänge.
  • RoleManager: Verwaltet Rollen und deren Zuweisung zu Benutzern.

Implementierungsleitfaden

1. Registrierung (POST)

Um einen Benutzer zu registrieren, folgen Sie normalerweise diesen Schritten:

  1. Validieren des DTO (Data Transfer Object).
  2. Erstellen einer `ApplicationUser`-Instanz.
  3. Verwendung von `_userManager.CreateAsync(user, password)`.
  4. Zuweisung einer Standardrolle (z. B. "User" oder "Admin").
  5. Den Benutzer anmelden.
// Code-Snippet: Einen Benutzer registrieren
ApplicationUser user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
IdentityResult result = await _userManager.CreateAsync(user, registerDTO.Password);

2. Login (POST)

Verwenden Sie den `SignInManager`, um Benutzer zu authentifizieren.

// Code-Snippet: Einen Benutzer anmelden
var result = await _signInManager.PasswordSignInAsync(loginDTO.Email, loginDTO.Password, isPersistent: false, lockoutOnFailure: false);
  • Verwenden Sie ReturnUrl, um Benutzer nach einer erfolgreichen Anmeldung zu ihrem ursprünglichen Ziel zurückzuleiten.

3. Logout

Rufen Sie einfach die Methode zum Abmelden auf:

await _signInManager.SignOutAsync();

Konfiguration in Program.cs

Konfigurieren Sie die Dienste für Identity und Autorisierung in Ihrer Startup-Datei.

Identity-Konfiguration

services.AddIdentity<ApplicationUser, ApplicationRole>(options => {
  options.Password.RequiredLength = 6;
  options.Password.RequireNonAlphanumeric = true;
  options.Password.RequireUppercase = true;
  options.Password.RequireLowercase = true;
  options.Password.RequireDigit = true;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();

Autorisierungsrichtlinien

services.AddAuthorization(options =>
{
  var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
  options.FallbackPolicy = policy; // Standardmäßig auf alles anwenden
});

Fortgeschrittene MVC-Funktionen

Tag Helper

Verwenden Sie diese in Ihren Views für eine saubere HTML-Generierung:

  • `asp-controller`: Ziel-Controller angeben.
  • `asp-action`: Ziel-Action angeben.
  • `asp-route-returnurl`: Rückgabe-URL übergeben.
  • `asp-validation-for`: Validierungsfehler anzeigen.

Remote-Validierung

Ermöglicht serverseitige Validierung (z. B. Prüfung, ob eine E-Mail bereits existiert) ohne vollständigen Neuladevorgang der Seite.

public class RegisterDTO
{
  [Remote(action: "IsEmailAlreadyRegistered", controller: "Account", ErrorMessage = "E-Mail wird bereits verwendet")]
  public string Email { get; set; }
}

Areas

Organisieren Sie große Anwendungen in logische Module (z. B. ein "Admin"-Bereich).

  • Verwenden Sie das Attribut `[Area("Admin")]` an Controllern.
  • Konfigurieren Sie das Area-Routing in der `Program.cs`.

Konventionelles vs. Attribut-Routing

  • Konventionell: Global definiert (z. B. `{controller=Home}/{action=Index}/{id?}`).
  • Attribut: Direkt an Actions mit `[Route("mein-pfad")]` definiert.

Best Practices für Sicherheit

  • HTTPS: In der Produktion immer aktivieren.
  • XSRF (CSRF) Schutz:
    • Verwenden Sie `[ValidateAntiForgeryToken]` bei POST-Actions.
    • Nutzen Sie Tag Helper in Formularen, um das Token automatisch einzubinden.
  • Passwortkomplexität: Erzwingen Sie stets starke Passwortregeln.
  • Autorisierungs-Attribute:
    • `[Authorize]`: Beschränkt den Zugriff auf angemeldete Benutzer.
    • `[AllowAnonymous]`: Ermöglicht Zugriff für jeden.

Interview-Schnellreferenz

  • Authentifizierung: Wer bist du? (Identity)
  • Autorisierung: Was darfst du tun? (Rollen/Claims)
  • Claims: Schlüssel-Wert-Paare, die den Benutzer beschreiben (z. B. Geburtsdatum, MitarbeiterID).
  • Rollen vs. Claims: Rollen sind Gruppen; Claims sind spezifische Attribute.

Kategorien: Keine
Zuletzt aktualisiert am 28.02.2026 04:57